Computers include general purpose central processing units (CPUs) that are designed to execute a specific set of system instructions. A group of processors that have similar architecture or design specifications may be considered to be members of the same processor family. Although a group of processors may be in the same family because of their similar architecture and design considerations, processors may vary widely within a family according to their clock speed and other performance parameters.
Computer manufacturers want to maximize their market share by having more rather than fewer applications run on the microprocessor family associated with the computer manufacturers' product line. To expand the number of operating systems (OSs) and application programs that can run on a computer system, a field of technology has developed in which a given computer having one type of CPU, called a host, may include virtualizing software that allows the host computer to virtualize another computer system, called a guest. The host computer may execute an application that may cause one or more host instructions to be called in response to a given guest instruction. Thus, the host computer has the capability to run software designed for its own hardware architecture and software written for computers having unrelated hardware architecture. It may also be possible to use virtualizing software to operate multiple incompatible operating systems concurrently on a single computer system. In this arrangement, although each operating system is incompatible with the other, the virtualizing software may host one of the two operating systems, allowing the otherwise incompatible operating systems to run concurrently on the same computer system.
When a guest computer system is virtualized on a host computer system, the guest computer system may be referred to as a “virtual machine,” as the guest computer system exists in the host computer system as a pure software representation of the operation of one specific hardware architecture. The terms emulator, virtual machine, and processor emulation may be used interchangeably to denote the ability to mimic or virtualize the hardware architecture of an entire computer system.
In a typical virtualized environment, multiple virtual machines, or “partitions,” may run on top of virtualizing software. This software, in turn, may run on top of hardware. The virtualizing software exposes the hardware in such a fashion that typically allows for a plurality of partitions, each with its own OS, to run on the hardware. Thus, the hardware may be virtualized for the partitions by the virtualizing software. Individual partitions may run disparate OSs, such as Windows, Linux, Solaris, and the like. These OSs may be isolated from each other such that if one OS in a partition crashes it will not affect other OSs in other partitions.
However, there is significant performance overhead associated with allowing for virtualization. The performance overhead may be particularly high in software applications requiring heavy input/output (I/O) workloads (e.g., applications with heavy disk access or network communications). This level of performance overhead may be unacceptable in applications that require maximum processor speed.
One cost associated with allowing for virtualization may be attributed to routing information between partitions. Conventionally, information may be routed between partitions by intercepting hardware traps. This process is typically slow and inefficient because no real hardware is involved. The process may be optimized by defining a software channel, or bus, for more efficient communication between partitions. The software channel improves on trap interception because both ends of the channel are virtual machine aware. However, such a channel may still require an unacceptable level of processor overhead due to duplicative processing in both partitions. This duplicative processing frequently occurs because functionality is often built as a stack of drivers, where only the lowest levels are virtual machine aware. For example, after a request traverses a stack in a client partition and is routed to a host partition, the request often must traverse a similar stack in the host partition in order to fulfill the requested operation. Thus, as information is being routed, it often traverses redundant and/or extraneous components in each partition, thereby increasing the number of processing steps. Furthermore, conventional routing techniques may facilitate other inefficiencies, such as increasing the number of buffer copies, software interrupts and/or context switches that normally occur when routing information between partitions. Therefore, it would be advantageous to provide a system and method for routing information between partitions in a virtualized computing environment without incurring the processor overhead that is typical in such an environment.